查看原文
其他

【综述专栏】元学习-总结

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

转载自知乎,已征得作者同意


00

前言
本文无任何商业目的,仅仅用于学习,全部内容摘自知乎其他作者的文章。
元学习是很抽象的概念,一些知乎作者对这些抽象概念进行了极其精妙的阐述。奈何太过零散,我记忆力较差,读一次忘一次。
所以,本文要对这些精妙阐述进行总结。
随着我进一步阅读(其它知乎文章、论文),本文会持续更新。
目前比较推荐的论文:
Meta-Learning in Neural Networks: A Survey
https://arxiv.org/pdf/2004.05439.pdf

A Survey of Deep Meta-Learning

https://arxiv.org/pdf/2010.03522.pdf
目前涵盖的内容:
01. 什么是元学习
02. 什么是元知识
03. 元学习经典算法背后的思想
04. MAML的执行过程与model pretraining & transfer learning的区别
05. 什么是少样本学习
06. 为什么要研究元学习
07. 元学习和监督学习的区别


01

什么是元学习
1. ALme的观点(总结得非常非常好)
假设我们有N个元素的数据集  ,有了这个数据集D,我们便可以学习到一个函数f,使得  .换句话说,从数据集  到函数  有一个映射  ,使得  .注意这个函数是从数据集到函数的映射,与我们一般学习的函数不同。
在我们认识的一般的监督学习中,上面的函数g,便是整个梯度下降的过程的抽象,这个过程把数据集D转化为了函数f。
用梯度下降来作为映射g两个问题,
1.学习速度太慢。梯度下降动辄几个小时的训练,作为一个函数,规模也忒大了。于是我们想要找出一个函数g,使得求g的函数值f的过程能加快。
2.“梯度下降”这个映射仅仅利用了D的信息(因为这个过程只是在拟合训练集),因此若D的规模太小,则很可能会过拟合。于是我们想让  包含一部分D之外的信息,也就是从其他任务中获取信息,从而增加其泛化能力。
为解决这两个问题,可以想到用一个神经网络(元学习)来代替整个梯度下降过程。

如上图,左边是数据集D,D通过一系列的神经网络转化为 的参数  。这样一来,数据集直接通过一个简单的前馈函数g转化为最终的函数.
问题又来了,如何得到这个前馈函数的参数呢?刚刚说过,g是数据集到函数f的映射,回忆一下,一般的监督学习中,学习一个x到y的函数是用很多样本x来拟合。放到这个问题里,x变成了整个数据集D。因此我们需要用很多个数据集来拟合函数g。
如何拟合呢?注意到g是从数据集到函数f的映射,因此训练过程测试集中的元素是一个一个的数据集。也就是说,我们的学习目标是让函数 对各种任务的数据集作用都能得到对应任务的泛化能力很强的模型  。因此我们需要将每个数据集  拆分为两个部分:   ,训练时g作用于  ,得到模型  ,然后对  中样本进行测试,得到的预测值与真实值之间求loss,然后梯度回传更新函数g,这样便使得g产生的是具有更强泛化能力的  。这是一般的监督学习无法完成的,因为传统监督学习只能用训练集进行训练,泛化能力无法保证。而元学习使得学习上升了一个维度,从而能用测试集进行训练。
2. Flood Sung的看法(总结得非常非常好)
(1)Meta Learning的定义
Meta Learning,也称为Learning to Learn,即学会学习,顾名思义就是学会某种学习的技巧,从而在新的任务task上可以学的又快又好。这种学习的技巧我们可以称为Meta-knowledge。Meta Learning和传统的机器学习最大的不同便在于Meta Learning是task level的,即每一个task都可以认为是meta learning的样本。基于这样的定义,我们可以得到Meta Learning的学习目标:

其中  是meta knowledge,  是task的分布,而D是task对应的数据集。简而言之,就是我们希望能够学到一个通用的meta knowledge,使得不同的task的Loss都能越小越好。
类似于传统的机器学习,Meta Learning分为Meta-train和Meta-test两个阶段,在Meta-train阶段中,我们通过采样大量的source task来学习meta knowledge (最大化其log likelihood):

然后再Meta-test使用target task来验证效果。这里要注意meta knowledge并不等同于用于解决task的model,model的参数是单独存在或者包含于meta knowledge中。所以,Meta-test的目标是基于已经学到的meta knowledge来寻找最优的model  :

有了以上的定义,我们要怎么来训练这个meta knowledge呢?这就要引出Meta Learning最常见的BiLevel Optimization的做法。
(2)什么是BiLevel Optimization?
记住Meta Learning是Task Level的,而一般的task会包含train set或test/val set,在meta learning中我们往往也称之为Support Set和Query Set。正常训练model的流程就是先使用train set训练,然后再使用test/val set 测试。因此,在meta-training的过程中,我们可以构造两层的optimization优化过程,在inner-loop即内层中使用train set更新model,然后再outer-loop基于更新后的model优化meta knowledge。

这么做可以完全模拟meta-test的过程,假设我们已经找到了最优的meta knowledge,那么意味着我们使用train set优化model得到参数也是最优的。
BiLevel Optimization的思想非常重要,几乎所有的meta learning问题都可以套在这个上面。
同时,我们也看到有一些meta learning的做法并没有显式的采用Bilevel optimization,但是实际上BiLevel Optimization中的Inner loop并不一定要用优化的方法,可以是任意的方式。所以,优化后的model 可以是隐式的通过meta knowledge来表示:

公式中的  即为基于meta knowledge和train set得到的隐式model。
3. 郑思座
传统深度学习的操作方式如下图,先定义一个网络架构,初始化参数,然后通过自己选择的优化器更新参数,图中通过两次epoch更新最终得到网络输出  ,那元学习与传统深度学习的联系在哪儿呢?注意到红色方框中的东西都是人为设计定义的,其实元学习的目标就是去自动学习或者说代替方框中的东西,不同的代替方式就发明出不同的元学习算法。比如说对于一个新任务的初始参数部分来说,如果能够提前获得一个来自其他任务学习到的较好的初始参数,可能经过很快的训练就能收敛到全局最优,也就是fast adaption。
4. 其他人的看法
(1)许铁
机器学习围绕一个具体的任务展开, 然而生物体及其一生, 学习的永远不只是一个任务。与之相对应的叫做元学习, 元学习旨在掌握一种学习的能力, 使得智能体可以掌握很多任务。
如果用数学公式表达, 这就好比先学习一个函数F(x),代表一种抽象的学习能力, 再此基础上学习f(x)对应具体的任务。
important: 模型试图学习的是不仅仅是通用的特征,而是可以迅速在少量数据提取模型的方法本身。
(2)凉爽的安迪
Meta Learning希望使得模型获取一种“学会学习”的能力,使其可以在获取已有“知识”的基础上快速学习新的任务,如:
  • 让Alphago迅速学会下象棋
  • 让一个猫咪图片分类器,迅速具有分类其他物体的能力
在元学习中,训练单位分层级了,第一层训练单位是任务,也就是说,元学习中要准备许多任务来进行学习,第二层训练单位才是每个任务对应的数据。
(3)Flood Sung
Meta Learning研究Task!

Meta Learning的目的是希望学习很多很多的task,然后有了这些学习经验之后,在面对新的task的时候可以游刃有余,学的快又学的好!

为什么叫Meta呢?Deep Learning是在Task里面研究,现在Meta Learning是在Task外面,更高层级来研究。也就是在Meta Learning的问题上,Task是作为样本来输入的。
面对一个全新的任务,我们为什么要从0开始学习呢?我们为什么不先学习一个Prior先验知识呢?如果我们构建的深度学习系统能够学到先验知识,并且能够利用这些知识,我们就可以在新的问题上学的更快更好
以前我们只是不知道Deep Learning是怎么学的,但至少知道是在学习下棋还是学习图像识别,现在对于Meta Learning,我们连学什么都不太清楚了。那么Meta到底如何定义?我们只能回归到Machine Learning本身来考虑这个概念。这里我给出一个我对Meta的定义:
任何超出学习(Learning/Training)内部的东西都是Meta的!
现在大家都在自嘲自己是炼金术士,我们每天调的参数就是Meta的,也就是在学习外部!所谓的学习就是这个训练过程,也可以说是反向传播过程。超出这个“学习的”都是学习外部,都是Meta的。这包含了以下这些类别:
1. 训练超参数Hyper Parameters:包括Learning rate,Batch Size,input size等等目前要人为设定的参数
2. 神经网络的结构
3. 神经网络的初始化
4. 优化器Optimizer的选择。比如SGD,Adam,RMSProp
5. 神经网络参数
6. 损失函数的定义。那么多gan的文章基本上就是改改损失函数。
7. 反向传播Back-propagation。对,这个也是Meta的,我们通过梯度下降的公式固定了参数的更新方式。神经网络傻傻只能按照这个公式来更新参数。
(4)Curry
元学习方法是学习一个通用的模型,使得这个模型在面对旧任务和新任务时都可以在几步梯度下降后达到相应任务的较优解。
由于预训练模型在面对新任务时更新了参数,让原先在旧任务上训练好的参数被新的信息覆盖,容易产生灾难性遗忘问题(重要)。
度量学习的核心在于损失函数的设置。
(5)Weiran Huang
度量学习的大致想法是学习一个强大的、具有良好迁移能力的特征提取器 (feature extractor) 来直接应用到目标任务上。这样,通过一个少参或者无参的分类器(比如 nearest neighbour)就可以做小样本分类任务了


02

什么是元知识
1. 我的观点
元知识非常非常抽象,可解释的空间非常大,认知科学、神经科学、心理学、哲学、日常生活、逻辑学都可以作为解释工具。
元损失就是针对任务的损失,它可以通过元优化器(反向传播等方式),更新元知识。
2. 许铁的观点
(1)生物体的元知识
生物是具备元学习能力的, 那么, 回答这个问题的非常好的入角点就是生物本身, 我们可以思考下生物的这种能力是怎么得到的。我们的大脑继承自我们祖先亿万年的进化史, 而又经过胎儿和幼年的发育, 以及后天常年累月的教育。从祖先的生存竞争, 到婴儿哭闹里包含的趋利避害的智慧, 到成人从书本里学习的数学或语言能力。都是一种元学习能力的积累。
由此看, 这种能力的获取一定来自于某种多时间尺度的积累过程, 可以把这种不同的能力分为进化得到的先天结构, 后天发育和观察探索得到对语言, 图像,空间等基本数据结构的理解力,以至于最后对不同领域知识的学习,也就是构建具体事物模型的能力, 我们可以把这看作一个连续的元学习过程。而最终才造就了在各种事物面前游刃有余的个体。
(2)生物体的世界模型

我觉得可能比先验知识更好的一个词是世界模型, 因为世界模型蕴含了不同层次的知识, 而且知识和知识不是孤立的, 而是存在因果联系的一个网络,也就是它对应一个被理解的世界,而不是死记硬背的词条。这个世界模型里的知识是有层次的。站在最底层的是一些特别基本的先验,而高层的对应更加具体的知识。对于比较根本的先验, 通常对应真实物理世界的常识,有一些常识熟悉到我们已经忽略到了它们的存在。比如时间,空间,运动,因果本身。这些先验往往对应我们在婴儿期就掌握的一种从进化,发育,和早期探索得来的知识,通茶被称为intuitive physics。这些先验一旦被利用,将大大减少需要的样本数。比如卷积就是抓住了空间平移这一类先验。虽然卷积的学习速度依然是缓慢的,但是相比一个全连接网络已经好太多。
另一类先验更为具体, 对应长期记忆中的基本概念的细胞,比如不同的颜色,老人儿童动物植物的区分, 这些是组成事物最根本的概念,比比刚说的intuitive physics 要具体, 但是相当于特定领域的知识,它们依然是非常基本的。这些先验的掌握, 会在特定的问题上大大减少需要的数据量。其中一类非常重要的概念, 是关于关系的假定, 比如加减法, 位置的相对关系, 关于概念比较等,有了这些关系, 基本概念可以组合成复杂概念, 这样对于新的复杂概念的学习可能仅仅需要几个样本。关于关系的常识里对时间预测特别重要的是因果关系, 和刚刚说的因果概念本身, 这里指的是各个领域里更为具体的因果常识,比如水网地处流, 有了这些关系先验, 对未发生的事情的预测需要的数据样本将大大减少,就好比掌握了基本物理定律的人很容易预测各类运动。
(3)人的复杂能力
人的复杂能力无疑是由各种基本能力组成的, 比如我们经常做的那些智商测试事实上是在测试我们的基本能力, 如记忆能力, 想像力, 推理能力。有的人具有很好的视觉工作记忆,看过一个东西过目不忘, 也有的人对数字敏感这是基本能力的不同。这些基本能力对应我们不同的脑区的一种素质, 这些脑区的组合成就了具有综合能力的人,使我们学习新的任务非常迅速。

03

元学习经典算法背后的思想
1. 许铁的观点
Metric-based Meta Learning: 学习事物背后的关联
我们知道深度学习的成功来源于能够学习数据的特征表示,进一步说, 一个特征表示是, 不同的数据样例进来, 它们的特征向量的几何距离, 与其在语义空间的相似度相对应。这类似于学习了一个metric,或者说度量, 它可以通过学习到的embedding。如此, 学习一个新的任务, 无非是把数据集所有的数据都用上,然后用KNN方法对测试数据进行分类。

我的理解:这里学到的embedding是非常general的,因为它能被用到各种任务上。而传统深度学习学到的embedding,往往只能用到同一种任务上。那么,我们可以做一下推断:元学习方法学到了事物背后的关联(学到了如何度量相似性),深度学习学会了分类,但有没有学到事物背后的关联,只有上天才知道。
Model-based Meta Learning: 学习如何建模(出自Flood Sung)

既然要通过以往的经验来学习,那索性通过在神经网络上添加Memory来实现。

既然Meta Learning的目的是实现快速学习,而快速学习的关键一点是神经网络的梯度下降要准,要快,那么索性让神经网络利用以往的任务学习如何预测梯度,这样面对新的任务,只要梯度预测得准,那么学习得就会更快了。

要让学习的速度更快,除了更好的梯度,如果有更好的loss,那么学习的速度也会更快,因此,索性可以构造一个模型利用以往的任务来学习如何预测Loss
Optimization-based Meta Learning: 学习如何学习
元学习的另一大类,通过学习如何学习新任务, 或者说学习加速新任务学习的方法来达到元学习的目的, 这一类方法可以称为基于优化的元学习方法。
神经网络是通过梯度下降来学习的, 对于一组相互关联的任务, 最简单的理解是, 每个任务都有一个最优下降方向, 以及自己的最低点。而如果我们要找到一个F, 让后面的f能够较好的下降, 那么最好的方法, 无疑是做一个预训练, 这个训练的过程能够让网络参数达到一个距离每个任务的最优参数都不太远的位置。一种比较直接的方法, 是取不同任务的梯度的平均方向, 来进行下降,先达到一个比较万金油的位置F。当然真实处理没有直接取平均那么简单,由此诞生了从MAML, 到Reptile 的一类方法。
2. Flood Sung的观点

我们还是根据Few-Shot Learning的问题设定来说明怎么学。

我们看到,现在输入到神经网络的数据变了,实际上就是多了一个D_train 训练集,也就是这个task拥有的东西。这个训练集比如上面说的5way 1shot,也就是5张图片和5个对应的标签。我们希望我们的神经网络能够仅根据这几张图片得到一个针对这几张图片的神经网络,从而能够对新的样本进行识别。所以,这里就产生一个问题:

怎么使用D_train来影响我们的神经网络呢?

1)HyperNetwork 生成参数

HyperNetwork是一个蛮有名的网络,简单说就是用一个网络来生成另外一个网络的参数。那么我们这里非常直接,我们的设想就是希望用一个hypernetwork输入训练集数据,然后给我输出我的对应模型也就是上图f的参数,我们希望输出的这个参数能够使得在测试图片上取得好的识别效果。那么,有了这样设计,这个hypernetwork其实就是一个meta network。

大家可以看到,本来基本的做法是用训练集直接训练这个模型f,但是现在我们用这个hypernetwork不训练了,直接给你输出参数,这等价于hypernetwork学会了如何学习图像识别,这也是为什么meta learning也同时叫做learning to learn的原因。我们通过hypernetwork学会学习。训练好了这个模型,连反向传播梯度下降都不要了,直接给你参数,是不是很酷?

那怎么训练这个神经网络呢?

这里有个所谓的episodic training!一个episode就是包含了一个task,有训练集有测试集。我们使用训练集输入到hypernetwork,得到f的参数,然后使用测试集输入到f 得到预测的标签,最后用测试集的样本标签得到模型的loss,之后就用梯度下降进行训练。所以我们可以看到,整个模型是端到端的。通过大量的episodic training,也就是大量的task进行训练,我们就可以训练出一个模型出来。

需要稍微说明一下这个task哪里来呢?我们采样出来的。比如我们给你100个类的训练样本,每一个类可能有600个图片,也就是imagenet的规模。但是我们这里不是直接batch这些样本进行训练,而是随机采样出一个task,比如选5个类,每一个类1个图片,然后再每一个类选5个图片作为task的测试集。这样采样是为了模拟meta-test阶段的task构造。

那么因为meta-train和train和乱,常常会混掉,所以大家约定俗成的把task里面的训练集称为support set,把task里面的测试集称为query set。而Meta training set和Meta test set分别直接称为training set和test set。

使用Hypernetwork在我看来是最直接表现meta learning的一种做法。但是现在实际上我们好像没有看到直接用hypernetwork做few shot learning的paper,而都是间接的使用,或者简单使用一下。具体的优缺点我们还是等下再总结。先说第二个方法。

2)Conditional Neural Network 条件神经网络

这个做法其实就是上图啦,我们直接把D_train当做条件输入到f中,那么这个f本身就变成一个meta network了。也就是条件神经网络实际上能够得到和上面的hypernetwork一样的意义。因为我们可以想,只要条件D_train变了,那么y_test肯定也就变了。所以这里就非常非常直接了。把数据全部输入进去,让神经网络自己学就行了,不外乎就是去设计一个合适的网络结构而已。那么,这里最最简单粗暴的网络结构就是SNAIL算法使用temporal convolutional network,也就是wavenet的架构:

当然,我们也可以巧妙一点的设计,比如我的relation net,不把标签y作为输入:

事实上基于条件神经网络的做法,效果是最好的。

3)MAML 基于梯度的做法

现在我们来说MAML,这个可以单独算一个不一样的做法。

这个思路只能说也太简单了,就是为什么不用D_train先用一般的监督学习方式更新一下网络,然后再使用更新参数后的f来使用D_test进行训练呢?这样的话,我们也通过D_train更新了网络了,只是我们希望我们只需用极少的step训练D_train就能使D_test取得好的效果。

所以,MAML的核心步骤就是
(1)采集Task,得到D_train和D_test
(2)使用D_train对神经网络f训练少数几步,得到新的参数
(3)利用新的参数训练D_test,然后使得梯度下降更新一开始的参数。
这里最不好理解的可能就是二次梯度了,也就是我们的目的还是要训练一开始的参数,只是中间我们要先计算梯度得到新的参数,然后用新的参数再算一次梯度,这样对于一开始的原始参数就要算两次梯度。这是MAML比较麻烦的地方,也可以认为是一种缺点。当然,现在使用Pytorch可以分分钟实现这种二次梯度的操作。
可以说MAML还是非常巧妙的,一种不一样的方法,当然了已经被Chelsea Finn发扬光大了。
4)三种解决办法的缺点
下面我们来谈谈三种办法的优缺点。先说HyperNetwork生成参数的做法。这种做法最大的问题就在于参数空间是很大的,所以要生成合适的参数特别是巨量的参数其实是比较困难的,所以目前绝大多数生成参数的做法都是只生成少量参数,比如一层的MLP,或者对于参数的空间进行一定的限制,比如就在[-1,1]之间,否则空间太多,有无数种选择输出一样的结果,就很难训了。但是采样HyperNetwork又有其灵活性,意味着我们可以只更新少部分参数,而不用全部。

接下来就是条件神经网络了。这又有什么问题呢?我觉得在性能上绝对会是最好的,很直接,但是不好看,一直要拖着一个条件,网络很大。不管是生成参数还是MAML,他们的模型网络就是独立的,之后只要输入x就行了,而条件神经网络每次都要输入条件,很烦啊。
那么MAML呢?可能最烦人的就是二次梯度了,这意味着MAML的训练会很慢,那么就很难hold住大网络了。实际上MAML目前对于大的网络结构比如Resnet效果并不好。然后MAML是使用D_train的Loss来更新整个网络,对比HyperNetwork缺少灵活性。这个Loss就是最好的吗?不见得。如果D_train是无监督数据,那怎么办?所以MAML是有局限性的。

04

MAML的执行过程与model pretraining & transfer learning的区别是什么?
1. 我的观点:
(1)对于model-based meta learning(MAML)而言
主要区别是训练目标、损失函数。迁移学习强调模型在预训练任务上表现好,MAML强调模型在测试任务上表现好。
在训练阶段,两者都会训练一组参数,在测试阶段,还有一点数据(少样本学习),这组参数要根据这点再次更新一次。元学习看得更远,它在训练阶段就为测试阶段的这次更新做准备了,迁移学习则没有。
此外,MAML的损失函数明显针对的是任务,根据任务的表现更新参数(support set 和 query set共同构成了一个任务,所以要等到query set测试完了之后再更新)。而迁移学习并没有任务观念,只有数据观念。
(郑思座的观点:MAML所评测的损失是在任务训练之后的测试loss,而pre-training是直接在原有基础上求损失没有经过训练。)
(2)对于metric-based meta learning而言
主要区别是元学习的使用任务更多,或者说它的训练目标是为那些没见过的任务(类别、分布完全不同)服务。
(3)对于model-based meta learning而言
区别非常明显,网络结构差别很大,元学习的网络结构要复杂得多。
2 凉爽的安迪的观点
我们将meta learning与model pretraining的loss函数写出来。

meta learning与model pretraining的loss函数

注意这两个loss函数的区别:
  • meta learning的L来源于训练任务上网络的参数更新过一次后(该网络更新过一次以后,网络的参数与meta网络的参数已经有一些区别),然后使用Query Set计算的loss;
  • model pretraining的L来源于同一个model的参数(只有一个),使用训练数据计算的loss和梯度对model进行更新;如果有多个训练任务,我们可以将这个参数在很多任务上进行预训练,训练的所有梯度都会直接更新到model的参数上。
看一下二者的更新过程简图:


meta learning与model pretraining训练过程,引自李宏毅《深度学习》
1. MAML是使用子任务的参数,第二次更新的gradient的方向来更新参数(所以左图,第一个蓝色箭头的方向与第二个绿色箭头的方向平行;左图第二个蓝色箭头的方向与第二个橘色箭头的方向平行)
2. 而model pretraining是使用子任务第一步更新的gradient的方向来更新参数(子任务的梯度往哪个方向走,model的参数就往哪个方向走)。
从sense上直观理解:
  • model pretraining最小化当前的model(只有一个)在所有任务上的loss,所以model pretraining希望找到一个在所有任务(实际情况往往是大多数任务)上都表现较好的一个初始化参数,这个参数要在多数任务上当前表现较好。
  • meta learning最小化每一个子任务训练一步之后,第二次计算出的loss,用第二步的gradient更新meta网络,这代表了什么呢?子任务从【状态0】,到【状态1】,我们希望状态1的loss小,说明meta learning更care的是初始化参数未来的潜力。
一个关注当下,一个关注潜力。
  • 如下图所示,model pretraining找到的参数  ,在两个任务上当前的表现比较好(当下好,但训练之后不保证好);
  • 而MAML的参数 在两个子任务当前的表现可能都不是很好,但是如果在两个子任务上继续训练下去,可能会达到各自任务的局部最优(潜力好)。

引自李宏毅《深度学习》

这里有一个toy example可以表现MAML的执行过程与model pretraining & transfer learning的区别。

训练任务:给定N个函数,y = asinx + b(通过给a和b不同的取值可以得到很多sin函数),从每个函数中sample出K个点,用sample出的K个点来预估最初的函数,即求解a和b的值。
训练过程:用这N个训练任务sample出的数据点分别通过MAML与model pretraining训练网络,得到预训练的参数。
如下图,用橘黄色的sin函数作为测试任务,三角形的点是测试任务中sample出的样本点,在测试任务中,我们希望用sample出的样本点还原橘黄色的线。
Toy example,引自李宏毅《深度学习》
  • model pretraining的结果,在测试任务上,在finetuning之前,绿色线是一条水平线,finetuning之后还原的线基本还是一条水平线。因为在预训练的时候,有很多sin函数,model pretraining希望找到一个在所有任务上都效果较好的初始化结果,但是许多sin函数波峰和波谷重叠起来,基本就是一条水平线。用这个初始化的结果取finetuning,得到的结果仍然是水平线。
  • MAML的初始化结果是绿色的线,和橘黄色的线有差异。但是随着finetuning的进行,结果与橘黄色的线更加接近。


05

什么是小样本学习
1. 许铁的看法
使用远小于深度学习所需要的数据样本, 达到接近甚至超越大数据深度学习的效果,也即是小样本学习的本质就是学习的效果与数据比较的提升, 或者说单位数据产生的模型收益增大了 。
与之高度相关的课题其实是迁移学习, 元学习, 提高模型泛化性能, 这些方法, 本质是在不对数据使用量进行限定的情况下, 如何让同一模型用到更广泛的数据分布和更多的任务
多一分泛化能力,就少一分数据成本。
如果没有任何先验知识, 当然是有多少数据有多少模型。然而, 如果先验知识是充足的, 那么其实可以数据不足, 知识来凑。另一条路则是提高单位数据的使用效率, 如果每个数据对模型的改进都是有效的,远离随机游走。
也就是说, 实现小样本学习的方法, 主要是 1, 如何让给定模型具备相关任务的先验知识, 2, 如何让每个数据产生的学习效果更加一步到位。
2. 小样本学习的实现范式

06

为什么要研究元学习
传统的机器学习研究模式是:获取特定任务的大型数据集,然后用这个数据集从头开始训练模型。很明显,这和人类利用以往经验,仅仅通过少量样本就迅速完成学习的情况相差甚远。


07

元学习和监督学习的区别
监督学习:
1. 只在一个任务上做训练;
2. 只有一个训练集和一个测试集;
3. 学习的是样本之间的泛化能力;
4. 要求训练数据和测试数据满足独立同分布;
5. 监督学习的训练和测试过程分别为train和test;
元学习:
1. 元学习是面向多个任务做联合训练;
2. 每个任务都有训练集和测试集;
3. 学习到的是任务之间的泛化能力;
4. 要求新任务与训练任务再分布上尽可能一致;
5. 元学习的训练和测试过程分别叫做Meta-train和Meta-test;

08

参考资料(排名无先后顺序)
作者:ALme 链接:https://zhuanlan.zhihu.com/p/106187779作者:许铁-巡洋舰科技 链接:https://zhuanlan.zhihu.com/p/87770344作者:许铁-巡洋舰科技 链接:https://zhuanlan.zhihu.com/p/294927458作者:凉爽的安迪 链接:https://zhuanlan.zhihu.com/p/136975128作者:Flood Sung 链接:https://zhuanlan.zhihu.com/p/133159617作者:Flood Sung 链接:https://zhuanlan.zhihu.com/p/46059552作者:Flood Sung 链接:https://zhuanlan.zhihu.com/p/32270990作者:郑思座 链接:https://zhuanlan.zhihu.com/p/108503451

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“综述专栏”历史文章


更多综述专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存